﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using DevExpress.Web.ASPxCallback;
using System.ComponentModel;
using System.Data;
using Model;
using DevExpress.Web.ASPxEditors;
using DevExpress.Web.ASPxGridView;
using System.Configuration;
using System.IO;

namespace WebApplication1
{


    public partial class Agrupaciones : System.Web.UI.Page
    {

        #region AgrupacionesDataTableCache
        private DataTable AgrupacionesDataTableCache
        {
            get
            {
                DataTable objTable = null;
                if (Cache["Agrupaciones.aspxDataTableCache" + Session.SessionID] != null)
                    objTable = (DataTable)Cache["Agrupaciones.aspxDataTableCache" + Session.SessionID];
                return objTable;
            }
            set
            {
                if (value != null)
                {
                    Cache.Insert("Agrupaciones.aspxDataTableCache" + Session.SessionID, value, null, DateTime.Now.AddMinutes(20), TimeSpan.Zero);
                }
            }
        }
        #endregion

        #region Page_Load
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cargarDepartamentos();
                cargarTipoGrupo();
                BindDatosAgrupaciones();

            }
            else
            {
                if (AgrupacionesDataTableCache != null)
                {
                    GridAgrupaciones.DataSource = AgrupacionesDataTableCache;
                    GridAgrupaciones.DataBind();
                }
            }

        }
        #endregion

        #region cargarDepartamentos
        private void cargarDepartamentos()
        {
            try
            {
                Model.DataClassesSidanzaDataContext contexto = new Model.DataClassesSidanzaDataContext();
                var datos = from a in contexto.BAS_ZONAS_GEOGRAFICAs
                            where object.Equals(a.ZON_PADRE_ID, null)
                            select a;
                if (datos == null) return;
                ddlDepartamento.DataSource = datos;
                ddlDepartamento.TextField = "ZON_NOMBRE";
                ddlDepartamento.ValueField = "ZON_ID";
                ddlDepartamento.DataBind();
                ddlDepartamento.Items.Insert(0, new DevExpress.Web.ASPxEditors.ListEditItem("--TODOS--", ""));
            }
            catch (Exception)
            {

                throw;
            }

        }
        #endregion

        #region cargarTipoGrupo
        private void cargarTipoGrupo()
        {
            try
            {
                Model.DataClassesSidanzaDataContext contexto = new Model.DataClassesSidanzaDataContext();
                var datos = from a in contexto.ART_TIPOS_AGRUPACIONEs
                            select a
                            ;
                if (datos == null) return;
                ddlTipoGrupo.DataSource = datos;
                ddlTipoGrupo.TextField = "ATA_NOMBRE";
                ddlTipoGrupo.ValueField = "ATA_ID";
                ddlTipoGrupo.DataBind();
                ddlTipoGrupo.Items.Insert(0, new DevExpress.Web.ASPxEditors.ListEditItem("--TODOS--", ""));
            }
            catch (Exception)
            {

                throw;
            }

        }
        #endregion

        #region BindDatosAgrupaciones
        private void BindDatosAgrupaciones()
        {
            try
            {
                Model.DataClassesSidanzaDataContext contexto = new Model.DataClassesSidanzaDataContext();
                var datos = from a in contexto.ART_AGRUPACIONES_DANZAs
                            join b in contexto.ART_TIPOS_AGRUPACIONEs on a.ATA_ID equals b.ATA_ID
                            join d in contexto.BAS_ZONAS_GEOGRAFICAs on a.ZON_ID equals d.ZON_ID
                            join e in contexto.BAS_ZONAS_GEOGRAFICA1s on d.ZON_PADRE_ID equals e.ZON_ID
                            join f in contexto.ART_TIPOS_AGRUPACIONEs on a.ATA_ID equals f.ATA_ID
                            from g in
                                (from g in contexto.ART_ENTIDADES_ARTEs where g.ENT_ID == a.ENT_ID select g).DefaultIfEmpty()
                            where
                                ddlMunicipio.Value != null ? d.ZON_ID == ddlMunicipio.Value : d.ZON_ID == d.ZON_ID &&
                                ddlDepartamento.Value != null ? e.ZON_ID == ddlDepartamento.Value : e.ZON_ID == e.ZON_ID &&
                            (ddlEntNombre.Value != null ? a.ENT_ID == Convert.ToInt32(ddlEntNombre.Value) : true) &&
                            (ddlTipoGrupo.Value != null ? f.ATA_ID == Convert.ToInt32(ddlTipoGrupo.Value) : f.ATA_ID == f.ATA_ID) &&
                            (txtATA_NOMBRE.Text != "" ? a.AAD_NOMBRE.Contains(txtATA_NOMBRE.Text) : a.AAD_NOMBRE == a.AAD_NOMBRE)

                            //(ddlArtClaseEntidadArtistica.SelectedValue != "0" ? f.ACE_ID == Convert.ToInt32(ddlArtClaseEntidadArtistica.SelectedValue) : f.ACE_ID == f.ACE_ID)

                            select new
                            {
                                a.AAD_ID,
                                a.AAD_NOMBRE,
                                a.AAD_CORREO,
                                a.AAD_DIRECCION,
                                a.AAD_TELEFONO,
                                f.ATA_NOMBRE,
                                MUNICIPIO = d.ZON_NOMBRE,
                                DEPARTAMENTO = e.ZON_NOMBRE,
                                g.ENT_NOMBRE
                                //DESCRIPCION = "",
                                //e.TEA_DESCRIPCION,
                                //f.ACE_NOMBRE
                            };
                if (datos == null) return;
                GridAgrupaciones.BeginUpdate();
                GridAgrupaciones.DataSource = datos;
                GridAgrupaciones.DataBind();
                GridAgrupaciones.EndUpdate();
                AgrupacionesDataTableCache = GetDataView(GridAgrupaciones);
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
            }
        }
        #endregion

        #region GetDataView
        private DataTable GetDataView(ASPxGridView grid)
        {
            DataTable dt = new DataTable();
            foreach (GridViewColumn col in grid.VisibleColumns)
            {
                GridViewDataColumn dataColumn = col as GridViewDataColumn;
                if (dataColumn == null) continue;
                dt.Columns.Add(dataColumn.FieldName);
            }
            for (int i = 0; i < grid.VisibleRowCount; i++)
            {
                DataRow row = dt.Rows.Add();
                foreach (DataColumn col in dt.Columns)
                    row[col.ColumnName] = grid.GetRowValues(i, col.ColumnName);
            }
            return dt;
        }
        #endregion

        #region ASPxCallback1_Callback
        protected void ASPxCallback1_Callback(object source, DevExpress.Web.ASPxCallback.CallbackEventArgs e)
        {
            int newsID = int.Parse(e.Parameter);


            DataSourceSelectArguments argumentos = new DataSourceSelectArguments();
            DataView dv = (DataView)SqlDataSourceDescripcion.Select(DataSourceSelectArguments.Empty);
            DataTable dt = dv.ToTable();
            foreach (DataRow row in dt.Rows)
            {
                if (row["ENT_ID"].ToString() == newsID.ToString())
                    e.Result = row["ENT_RESENA"].ToString();
            }
        }
        #endregion

        #region ddlDepartamento_SelectedIndexChanged
        protected void ddlDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlDepartamento.Value == null)
            {
                ddlMunicipio.Items.Clear();
                ddlMunicipio.Value = null;
                return;
            }

            if (ddlDepartamento.Value.ToString() == "")
            {
                ddlMunicipio.Items.Clear();
                return;
            }
            if (ddlDepartamento.Value.ToString() == "0")
            {
                ddlMunicipio.Items.Clear();
                return;
            }
            //ddlMunicipio.Items.Clear();
            Model.DataClassesSidanzaDataContext contexto = new Model.DataClassesSidanzaDataContext();
            var datos = from a in contexto.BAS_ZONAS_GEOGRAFICAs
                        where object.Equals(a.ZON_PADRE_ID, ddlDepartamento.Value)
                        select a;
            if (datos == null) return;
            ddlMunicipio.DataSource = datos;
            ddlMunicipio.TextField = "ZON_NOMBRE";
            ddlMunicipio.ValueField = "ZON_ID";
            ddlMunicipio.DataBind();

            ddlMunicipio.Items.Insert(0, new DevExpress.Web.ASPxEditors.ListEditItem("--Todos--", ""));
            ddlMunicipio.Value = "";
        }
        #endregion

        #region btnBuscar_Click
        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            BindDatosAgrupaciones();
        }
        #endregion

        #region GridAgrupaciones_RowCommand
        protected void GridAgrupaciones_RowCommand(object sender, ASPxGridViewRowCommandEventArgs e)
        {
            if (e.KeyValue.ToString() != "")
            {
                try
                {
                    Model.DataClassesSidanzaDataContext contexto = new Model.DataClassesSidanzaDataContext();
                    var datos = from a in contexto.ART_AGRUPACIONES_DANZAs

                                where
                                    a.AAD_ID == Convert.ToInt32(e.KeyValue.ToString())
                                select new
                                {
                                    a.AAD_NOMBRE,
                                    a.AAD_TELEFONO,
                                    a.AAD_NIT,
                                    a.AAD_CORREO,
                                    a.AAD_DIRECCION,
                                    a.AAD_DESCRIPCION,
                                    a.AAD_ANOS_TRAYECTORIA,
                                    a.AAD_INSTITUCIONALIDAD,
                                    a.AAD_FINANCIACION,
                                    a.AAD_PERFILES_FORMADORES,
                                    a.AAD_CONDICIONES_LABORALES_FORMADORES,
                                    a.AAD_PROGRAMA_AGRUPACION,
                                    a.AAD_LOGROS_AGRUPACION,
                                    a.AAD_INFRAESTRUCTURA,
                                    a.AAD_ACTIVIDADES_ACTUALIZACION_FORMADORES,
                                    a.AAD_HORAS_SEMANA,
                                    a.AAD_MES_ANO,
                                    a.AAD_PERIODOS_DESCANSO

                                };

                    if (datos != null)
                    {
                        //existen proponentes y proyectos
                        //verifica el si es propietario del registro
                        foreach (var v in datos)
                        {
                            ///////////////////////////////////
                            //   CARGAR DETALLE AGRUPACIONES      //
                            ///////////////////////////////////
                            lblAAD_NOMBRE.Text = v.AAD_NOMBRE;
                            lblAAD_TELEFONO.Text = v.AAD_TELEFONO;
                            lblAAD_NIT.Text = v.AAD_NIT.ToString();
                            lblAAD_CORREO.Text = v.AAD_CORREO;
                            lblAAD_DIRECCION.Text = v.AAD_DIRECCION;
                            lblAAD_DESCRIPCION.Text = v.AAD_DESCRIPCION;
                            lblAAD_ANOS_TRAYECTORIA.Text = v.AAD_ANOS_TRAYECTORIA.ToString();
                            lblAAD_INSTITUCIONALIDAD.Text = v.AAD_INSTITUCIONALIDAD;
                            lblAAD_FINANCIACION.Text = v.AAD_FINANCIACION;
                            lblAAD_PERFILES_FORMADORES.Text = v.AAD_PERFILES_FORMADORES;
                            lblAAD_CONDICIONES_LABORALES_FORMADORES.Text = v.AAD_CONDICIONES_LABORALES_FORMADORES;
                            lblAAD_PROGRAMA_AGRUPACION.Text = v.AAD_PROGRAMA_AGRUPACION;
                            lblAAD_LOGROS_AGRUPACION.Text = v.AAD_LOGROS_AGRUPACION;
                            lblAAD_INFRAESTRUCTURA.Text = v.AAD_INFRAESTRUCTURA;
                            lblAAD_ACTIVIDADES_ACTUALIZACION.Text = v.AAD_ACTIVIDADES_ACTUALIZACION_FORMADORES;
                            lblAAD_HORAS_SEMANA.Text = v.AAD_HORAS_SEMANA.ToString();
                            lblAAD_MES_ANO.Text = v.AAD_MES_ANO.ToString();
                            lblAAD_PERIODO_DESCANSO.Text = v.AAD_PERIODOS_DESCANSO.ToString();
                        }

                    }

                }
                catch (Exception ex)
                {
                    ex.Message.ToString();
                }
            }
            #endregion 
        }
    }
}